#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <unistd.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>


int main(int argc, char const *argv[])
{

    // dup2    
    // int fd1 = open("text1.txt",O_RDWR|O_CREAT,644);
    // int fd2 = open("text2.txt",O_RDWR|O_CREAT,644);
    // dup2(fd1,1);
    // write(fd1,"abcde",5);
    // printf("abcdefg\n");

    // dup2(fd1,0);
    // dup2(STDIN_FILENO,0);
    // char ch[50];
    // scanf("%s",ch);
    // printf("%s\n",ch);
    // close(fd1);


    // // fcntl
    // // 空管道文件默认阻塞，
    // mkfifo("/home/xiaohuang/pipe",0666);
    // int fd = open("/home/xiaohuang/pipe",O_RDWR);

    // // 将空管道文件设置为非阻塞
    // long status = fcntl(fd,F_GETFL);
    // status |= O_NONBLOCK;
    // fcntl(fd,F_SETFL,status);

    // char buf[10];
    // read(fd,buf,10);
    // printf("123454\n");

    // // 将管道文件设置为阻塞
    // status = fcntl(fd,F_GETFL);
    // status &= ~O_NONBLOCK;
    // fcntl(fd,F_SETFL,status);
    // read(fd,buf,10);
    // printf("abcd\n");

    // 标准IO缓冲区
    
    FILE *fp = fopen("a.txt","w+");

    // fputs("hello word!\n",fp);


    // 6.改变文件类型
    // char buf[512];
    // setvbuf(fp,buf,_IOLBF,512);

    // 7.遇到'\n'，立刻冲洗
    // fputs("hello word!\n",fp);

    // 5.读取文件内容时
    // char buf[20];
    // fread(buf,20,1,fp);

    // 3. fflish强制冲洗
    //fflush(fp);

    // 4. 文件关闭
    //fclose(fp);

    // 1.缓冲区填满
    int count = 0;
    while(1)
    {
        fputc('a',fp);
        struct stat st;
        stat("a.txt",&st);
        if(st.st_size>0)
            break;
        count++;
    }
    printf("%d\n",count);

    pause();

    // 2.程序退出
    return 0;
}
